import axios from 'axios'
// import { MessageBox, Message } from 'element-ui'
import store from '@/store'
// import { getToken } from '@/utils/auth'
import { Message } from 'element-ui'
import { getTimeStamp } from '@/utils/auth'
import router from '@/router'
// 封装校验是否超时的函数
const checkTimeout = () => {
  // 1. 设定超时时间间隔
  const timeout = 3600000
  // 2. 获取之前的记录
  const loginTime = getTimeStamp()
  // console.log('loginTime', loginTime)
  // 3. 获取当前的时间
  const now = new Date()
  const nowTime = now.getTime()
  // console.log('nowTime', nowTime)
  // console.log('相减', nowTime - loginTime)
  // 4. 当前时间减去之前的记录如果超过了时间间隔那就算是超时
  return nowTime - loginTime > timeout
}
// create an axios instance
const service = axios.create({
  baseURL: process.env.VUE_APP_BASE_API, // url = base url + request url
  // withCredentials: true, // send cookies when cross-domain requests
  timeout: 5000 // request timeout
})

// request interceptor
service.interceptors.request.use(
  config => {
    // console.log(store)
    if (store.getters.token) {
      // 这里之前只是进行token的注入
      // 现在还要主动介入检查token是否超时
      // 由于超时的逻辑算是复杂, 另外封装一个函数来使用
      const isTimeout = checkTimeout()
      if (isTimeout) {
        // 如果已经超时
        console.log('已超时')
        store.dispatch('user/logout')

        router.push('/login')

        return Promise.reject(new Error('已超时, 请重试'))
      }

      config.headers.Authorization = `Bearer ${store.getters.token}`
      // console.log(config.headers.Authorization)
    }
    // console.log(config)
    return config
  },
  err => {
    console.log(err)
    // console.log(11111)
    console.dir(err)
    // 网络层面的失败
    // 网络层面的失败
    // 1. 提示错误
    // 1. 提示错误

    // Message.error('系统繁忙, 请稍后再试')
    Message.error(err.message || '系统繁忙, 请稍后再试')
    return Promise.reject('请求错误 ')
  }
)

// response interceptor
service.interceptors.response.use(
  res => {
    // console.log(res)
    // const { success, message } = res.data
    const { success, message, data } = res.data
    if (success) {
      // console.log(1)
      // return res
      // console.log(Promise)
      return data
    } else {
      Message.error(message)
      return Promise.reject(new Error(message))
    }
  },
  err => {
    console.log(err)
    if (err.response && err.response.data && err.response.data.code === 10002) {
      store.dispatch('user/login')
      router.push('/login')
    }
    // console.log('经过了这里')
    Message.error(err.message || '系统繁忙，请稍后')
    return Promise.reject(new Error('系统繁忙，请稍后'))
  }
)

export default service
